#Исследование базы данных о глобальном терроризме:
##Цели исследования: На заметку: сделать по график стран мира и числа терактов в них
Разобьём задачи на подзадачи: Интересующие подзадачи: Страны: Число преступлений в странах/их процентное соотношение Характер преступления в каждой стране Преступления: Характер и успешность преступления Зависимость преступления от страны Характер суицидальных атак Даты: Криминальные годы Продолжительные преступления Локация: Поквадратное исследование
Важное замечание: База данных образована таким образом, что некоторые столбцы пусты или неправильно заполнены вплоть до 1997-го года
library("tidyverse")
## Warning: пакет 'tidyverse' был собран под R версии 4.2.3
## Warning: пакет 'ggplot2' был собран под R версии 4.2.3
## Warning: пакет 'tibble' был собран под R версии 4.2.3
## Warning: пакет 'tidyr' был собран под R версии 4.2.3
## Warning: пакет 'readr' был собран под R версии 4.2.3
## Warning: пакет 'purrr' был собран под R версии 4.2.3
## Warning: пакет 'dplyr' был собран под R версии 4.2.3
## Warning: пакет 'stringr' был собран под R версии 4.2.3
## Warning: пакет 'forcats' был собран под R версии 4.2.3
## Warning: пакет 'lubridate' был собран под R версии 4.2.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.3 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.4 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library("ggplot2")
library("gganimate")
## Warning: пакет 'gganimate' был собран под R версии 4.2.3
library("rworldmap")
## Warning: пакет 'rworldmap' был собран под R версии 4.2.3
## Загрузка требуемого пакета: sp
## Warning: пакет 'sp' был собран под R версии 4.2.3
## ### Welcome to rworldmap ###
## For a short introduction type : vignette('rworldmap')
library("leaflet")
## Warning: пакет 'leaflet' был собран под R версии 4.2.3
GT <- read.csv("globalterrorism.csv")
Наблюдение 1: Не все даты соответствуют описанию из Codebook’а. Так eventid состоит из 12 цифр. Первые 8 — год (4 цифры), месяц (2 цифры)и день (2 цифры); последние 4 — порядковый номер для даты. При этом существуют несоответствия между датами и eventid и есть нулевой месяц и нулевой день (?) В целях экономии сил и времени будет пользоваться исходными данными.
Ошибочное наблюдение: в Codebook указано, что 0 - неопределённая дата
GT <- GT|>
mutate(year = as.integer(str_sub(eventid, start=1, end=4)),
month = as.integer(str_sub(eventid, start=5, end=6)),
day = as.integer(str_sub(eventid, start=7,end=8)),
.after=eventid)
GT <- GT|>
mutate(date=as.Date(with(GT, paste(year, month, day, sep="-")), "%Y-%m-%d"),
.after=day)|>
mutate(idate=as.Date(with(GT, paste(iyear, imonth, iday, sep="-")), "%Y-%m-%d"),
.after=iday)
dateValidator <- if_else(GT$date == GT$idate, T, F, NA)
length(dateValidator)
## [1] 181691
length(dateValidator[dateValidator == T])
## [1] 176727
length(dateValidator[dateValidator == F])
## [1] 5870
length(dateValidator[is.na(dateValidator)])
## [1] 906
Конец наблюдения 1.
Наблюдения 2: Даты
GTO <- GT|>
select(!c(year, month, day, date))
Год
GTOY <- GTO|>
group_by(iyear)|>
summarize(yearNum = n())
rmarkdown::paged_table(GTOY|>arrange(desc(iyear)))
plot(GTOY$iyear, GTOY$yearNum, type="l",
xlab = "Year", ylab = "Number of Crimes")
summary(GTOY$yearNum)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 471 1364 2870 3866 4504 16903
Месяц
GTOY <- GTO|>
group_by(imonth)|>
summarize(monthNum = n())
barplot(height = GTOY$monthNum,
names.arg=GTOY$imonth,
xlab = "Month",
ylab = "Number of Crimes")
summary(GTOY$monthNum)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 20 14180 15152 13976 15563 16875
День
GTOY <- GTO|>
group_by(iday)|>
summarize(dayNum = n())
barplot(GTOY$dayNum,
names.arg=GTOY$iday,
xlab = "Day",
ylab = "Number of Crimes")
summary(GTOY$dayNum)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 891 5817 5933 5678 6027 6500
Проверял, есть ли строки, в которых idate = NA и extended = 1 (событие длится более 24 часов). Обоснование: хотим проверить, есть ли в датасете данные, для которых неизвестно, когда они начались, но известно, что они длились более 24 часов. Из того, что была выдан пустой data.frame следует, что таких строк нет.
GTO|>
select(idate, extended)|>
filter(is.na(idate) && extended == 1)|>
rmarkdown::paged_table()
## Warning: There was 1 warning in `filter()`.
## ℹ In argument: `is.na(idate) && extended == 1`.
## Caused by warning in `is.na(idate) && extended == 1`:
## ! 'length(x) = 181691 > 1' перекодирован в 'logical(1)'
Длительность Для всех случаев, когда точная дата неизвестна, длительность события < 24 часов (одного дня)
Выводы: Присутствуют даты для которых extended = 1, но resolution = NA; Имеются данные с отрицательными временными промежутками (Ошибочные данные или запоздалое событие?) Самое длинное событие длилось 7324 дня (к сожалению, опечатка в базе данных)(индекс 4808).
GTD <- GTO|>
select(eventid,idate, extended, resolution)|>
group_by(idate)|>
mutate(resNum=as.numeric(as.Date(resolution, format="%m/%d/%Y")),
idateNum=as.numeric(idate))|>
# mutate(resolution=ifelse(is.na(resolution),0,resolution),
# idateNum=ifelse(is.na(idate),0,idateNum))|>
mutate(duration = ifelse(extended==0,0, resNum-idateNum))|>group_by(duration)
rmarkdown::paged_table(GTD|>summarize(durationNum=n())|>
arrange(desc(durationNum)))
Заодно проверили, что не обязательно чем больше событий, тем меньше длительность.
Страны: Исходя из карты, можно увидеть, какие страны и в каком числе имеют теракты
library("rworldmap")
GTV <- GTO|>
select(country_txt)|>
group_by(country_txt)|>
summarize(country_terror_num=n(), country_terror_per=100*n()/nrow(GTO))|>
arrange(desc(country_terror_num))
spdf<-joinCountryData2Map(GTV, joinCode = "NAME", nameJoinColumn = "country_txt", verbose = T)
## 187 codes from your data successfully matched countries in the map
## 18 codes from your data failed to match with a country code in the map
## failedCodes failedCountries
## [1,] NA "West Bank and Gaza Strip"
## [2,] NA "West Germany (FRG)"
## [3,] NA "Yugoslavia"
## [4,] NA "Rhodesia"
## [5,] "" "Soviet Union"
## [6,] "GLP" "Guadeloupe"
## [7,] NA "Zaire"
## [8,] NA "East Germany (GDR)"
## [9,] "MTQ" "Martinique"
## [10,] NA "Serbia-Montenegro"
## [11,] NA "Czechoslovakia"
## [12,] NA "North Yemen"
## [13,] NA "People's Republic of the Congo"
## [14,] NA "South Yemen"
## [15,] NA "Falkland Islands"
## [16,] NA "International"
## [17,] NA "New Hebrides"
## [18,] NA "South Vietnam"
## 56 codes from the map weren't represented in your data
mapCountryData(spdf, nameColumnToPlot="country_terror_num",catMethod="fixedWidth",
missingCountryCol=gray(.8),colourPalette = "topo",mapRegion="world")
rmarkdown::paged_table(GTV|>arrange(desc(country_terror_num)))
barplot(GTV$country_terror_num, names.arg=GTV$country_txt, col = rainbow(100))
Как изменится карта, если выбросить топ 5?
library("rworldmap")
GTVn <- GTO|>
select(country_txt)|>
group_by(country_txt)|>
summarize(country_terror_num=n())|>
arrange(desc(country_terror_num))|>
slice(6:n())
spdf<-joinCountryData2Map(GTVn, joinCode = "NAME", nameJoinColumn = "country_txt", verbose = T)
## 182 codes from your data successfully matched countries in the map
## 18 codes from your data failed to match with a country code in the map
## failedCodes failedCountries
## [1,] NA "West Bank and Gaza Strip"
## [2,] NA "West Germany (FRG)"
## [3,] NA "Yugoslavia"
## [4,] NA "Rhodesia"
## [5,] "" "Soviet Union"
## [6,] "GLP" "Guadeloupe"
## [7,] NA "Zaire"
## [8,] NA "East Germany (GDR)"
## [9,] "MTQ" "Martinique"
## [10,] NA "Serbia-Montenegro"
## [11,] NA "Czechoslovakia"
## [12,] NA "North Yemen"
## [13,] NA "People's Republic of the Congo"
## [14,] NA "South Yemen"
## [15,] NA "Falkland Islands"
## [16,] NA "International"
## [17,] NA "New Hebrides"
## [18,] NA "South Vietnam"
## 61 codes from the map weren't represented in your data
mapCountryData(spdf, nameColumnToPlot="country_terror_num",catMethod="fixedWidth",
missingCountryCol=gray(.8),colourPalette = "topo",mapRegion="world")
rmarkdown::paged_table(GTVn|>arrange(desc(country_terror_num)))
barplot(GTVn$country_terror_num, names.arg=GTVn$country_txt, col = rainbow(100))
Видим, что не во всех странах были установлены преступления/теракты. Возможно их и не было. В любом случае, предоставим список стран, которые выделены серым на карте.
countries <- getMap()
countries <- countries$NAME[!(countries$NAME%in%GTV$country_txt)]|>
as.data.frame()
rmarkdown::paged_table(countries)
Формы терроризма:
library("grid")
library("gridBase")
## Warning: пакет 'gridBase' был собран под R версии 4.2.3
GTD <- GTO|>
select(eventid,doubtterr, alternative_txt, attacktype1_txt, attacktype2_txt,
attacktype3_txt)|>
mutate(alternative_txt = ifelse(doubtterr==0, "Terrorism", alternative_txt))|>
mutate(alternative_txt = ifelse(doubtterr==-9, "Not Included", alternative_txt))
GTDdterr <- GTD|>group_by(alternative_txt)|>
summarize(terrtype_num = n(), terrtype_per = 100*n()/nrow(GTO))|>arrange(desc(terrtype_num))
rmarkdown::paged_table(GTDdterr)
b <- barplot(GTDdterr$terrtype_num, col=rainbow(50))
vps<-baseViewports()
pushViewport(vps$inner, vps$figure, vps$plot)
grid.text(GTDdterr$alternative_txt,
x=unit(b, "native"), y=unit(-1,"lines"),
just="right",rot=50, gp=gpar(fontsize=7, col=rainbow(50)))
popViewport(3)
text(b, GTDdterr$terrtype_num[1], labels=GTDdterr$terrtype_num, pos=1)
region:
GTO|>
group_by(country_txt, region_txt, provstate, city)|>
summarize(terr_num = n(), terr_per=100*n()/nrow(GTO))|>
arrange(desc(terr_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'country_txt', 'region_txt', 'provstate'.
## You can override using the `.groups` argument.
GTO|>
filter(country_txt == "Iraq", city == "Baghdad")|>
group_by(iyear, imonth, iday)|>
summarize()|>
arrange(iyear, imonth, iday)|>
as.data.frame()|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'iyear', 'imonth'. You can override using
## the `.groups` argument.
Первый записанный теракт в Багдаде берёт своё начало с 15-го декабря 1976-го, а заканчивается 30-ым декабрём 2017-го. Суммарно 14990 дней между этими датами. Учитывая то, что в Багдаде за это время произошло 7585, то, в среднем
14990/7585
## [1] 1.976269
Почти каждые 2 дня в Багдаде происходил какой-то теракт или преступление.
GTD <- GTO|>filter(country_txt=="Iraq", city=="Baghdad")|>
group_by(iyear)|>
summarize(num = n(), per=100*n()/nrow(GTO|>filter(country_txt=="Iraq", city=="Baghdad")))|>
arrange(iyear)
rmarkdown::paged_table(GTD)
plot(GTD$iyear, GTD$num, type="l",
xlab="Year", ylab="Number of Crimes", main="Crimes/Terracts in Baghdad (1976-2017)")+ grid(lty=1)
## integer(0)
target/natlty:
GTO|>group_by(target1, natlty1_txt, target2, natlty2_txt, target3, natlty3_txt)|>
summarize(targ_num=n(),targ_per=100*n()/nrow(GTO))|>
arrange(desc(targ_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'target1', 'natlty1_txt', 'target2',
## 'natlty2_txt', 'target3'. You can override using the `.groups` argument.
perpetrator group:
GTO|>group_by(gname,gsubname,guncertain1, gname2,gsubname2,guncertain2,
gname3,gsubname3,guncertain3)|>
summarize(g_num=n(),g_per=100*n()/nrow(GTO))|>
arrange(desc(g_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'gname', 'gsubname', 'guncertain1',
## 'gname2', 'gsubname2', 'guncertain2', 'gname3', 'gsubname3'. You can override
## using the `.groups` argument.
claims:
GTO|>group_by(claimed, claimmode_txt, claim2, claimmode2_txt,
claim3, claimmode3_txt)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'claimed', 'claimmode_txt', 'claim2',
## 'claimmode2_txt', 'claim3'. You can override using the `.groups` argument.
Общее число жертв:
sum(GTO$nkill, na.rm=T)
## [1] 411868
sum(GTO$nwound, na.rm=T)
## [1] 523869
sum(GTO$nkillter, na.rm=T)
## [1] 58291
sum(GTO$nwoundte,na.rm=T)
## [1] 12061
sum(GTO$nkillus, na.rm=T)
## [1] 5391
sum(GTO$nwoundus, na.rm=T)
## [1] 4556
nkill:
temp <- GTO|>group_by(nkill)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))
rmarkdown::paged_table(temp)
plot(y=log10(temp$nkill), x=log10(temp$uni_num), type='l', ylab="Kill Count", xlab="Number of Incidents")
nkillus:
GTO|>group_by(nkillus)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
nkillter:
GTO|>group_by(nkillter)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
nwound:
GTO|>group_by(nwound)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
nwoundus:
GTO|>group_by(nwoundus)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
nwoundte:
GTO|>group_by(nwoundte)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
propertydamage:
GTO|>group_by(property, propextent_txt, propcomment, propvalue)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'property', 'propextent_txt',
## 'propcomment'. You can override using the `.groups` argument.
nhostkid:
GTO|>group_by(ishostkid, nhostkid, nhours, ndays)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'ishostkid', 'nhostkid', 'nhours'. You can
## override using the `.groups` argument.
divert:
GTO|>group_by(divert, kidhijcountry)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'divert'. You can override using the
## `.groups` argument.
international:
GTO|>group_by(INT_LOG, INT_IDEO, INT_MISC)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'INT_LOG', 'INT_IDEO'. You can override
## using the `.groups` argument.
ransom:
GTO|>group_by(ransomamt, ransompaid)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'ransomamt'. You can override using the
## `.groups` argument.
Про latitude/longitude. Что, если разбить карту мира на квадратики и посчитать число терактов в них?
range_coord <- function(param){
return(paste(param-param%%10, param-param%%10+10,sep="-"))
}
GTD <- GTO|>
group_by(latitude, longitude)|>
mutate(latitude = sapply(latitude, range_coord),
longitude = sapply(longitude, range_coord))|>
summarize(block_num=n(),block_per=100*n()/nrow(GTO))|>
arrange(desc(block_num))
## `summarise()` has grouped output by 'latitude'. You can override using the
## `.groups` argument.
rmarkdown::paged_table(GTD)
GTO1970 <- GTO|>filter(iyear==1970)
map <- leaflet(GTO1970)|>
addTiles()|>
addCircleMarkers(popup=GTO1970$summary, label=GTO1970$summary)
## Assuming "longitude" and "latitude" are longitude and latitude, respectively
## Warning in validateCoords(lng, lat, funcName): Data contains 8 rows with either
## missing or invalid lat/lon values and will be ignored
map
leaf <- leaflet() %>%
addTiles() %>%
addSimpleGraticule(interval=10)
leaf
specificity/vicinity (Про точность данных):
GTO|>group_by(specificity, vicinity)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'specificity'. You can override using the
## `.groups` argument.
Complex Analysis 1:
GTO|>group_by(country_txt, attacktype1_txt)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(country_txt, desc(uni_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'country_txt'. You can override using the
## `.groups` argument.
total bombing/explosion in each country
GTO|>filter(attacktype1_txt=="Bombing/Explosion")|>group_by(country_txt)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
attacktype/success:
GTO|>group_by(attacktype1_txt, attacktype2_txt, attacktype3_txt, success)|>
summarize(succ_num=n(), succ_per=100*n()/nrow(GTO))|>
arrange(attacktype1_txt,attacktype2_txt,attacktype3_txt,desc(success))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'attacktype1_txt', 'attacktype2_txt',
## 'attacktype3_txt'. You can override using the `.groups` argument.
attacktypes:
GTO|>select(iyear, attacktype1_txt,attacktype2_txt,attacktype3_txt)|>
gather(key="iyear", value="attacktype", -iyear)|>
filter(attacktype!="")|>
count(iyear, attacktype)|>as.data.frame()|>
rmarkdown::paged_table()
targets
GTO|>select(iyear, target1, target2, target3)|>
gather(key="iyear", value="target", -iyear)|>
filter(target!="")|>
count(iyear, target)|>as.data.frame()|>
arrange(iyear, desc(n))|>
rmarkdown::paged_table()
targtype
GTO|>select(iyear, targtype1_txt,targtype2_txt,targtype3_txt)|>
gather(key="iyear", value="target", -iyear)|>
filter(target!="")|>
count(iyear, target)|>as.data.frame()|>
arrange(iyear, desc(n))|>
rmarkdown::paged_table()
year/attacktype:
library(ggplot2)
library(gganimate)
library(gapminder)
## Warning: пакет 'gapminder' был собран под R версии 4.2.3
library(gifski)
## Warning: пакет 'gifski' был собран под R версии 4.2.3
GTA <- GTO|>select(iyear, attacktype1_txt,attacktype2_txt,attacktype3_txt)|>
gather(key="year", value="attacktype", -iyear)|>
filter(attacktype!="")|>
count(iyear, attacktype)|>as.data.frame()|>
rename(num=n)|>
group_by(iyear)|>
mutate(rank=min_rank(-num)*1)|>
filter(rank<=5)|>
ungroup()
p <- ggplot(GTA, aes(rank, group = attacktype,
fill = as.factor(attacktype), color = as.factor(attacktype))) +
geom_tile(aes(y = num/2,
height = num,
width = 0.9), alpha = 0.8, color = NA) +
# text in x-axis (requires clip = "off" in coord_*)
# paste(country, " ") is a hack to make pretty spacing, since hjust > 1
# leads to weird artifacts in text spacing.
geom_text(aes(y = 0, label = paste(attacktype, " ")), vjust = 0.2, hjust = 1) +
coord_flip(clip = "off", expand = FALSE) +
scale_y_continuous(labels = scales::comma) +
scale_x_reverse() +
guides(color = FALSE, fill = FALSE) +
labs(title='{closest_state}', x = "", y = "Number of Attack Type") +
theme(plot.title = element_text(hjust = 0, size = 22),
axis.ticks.y = element_blank(), # These relate to the axes post-flip
axis.text.y = element_blank(), # These relate to the axes post-flip
plot.margin = margin(1,1,1,4, "cm")) +
transition_states(iyear, transition_length = 4, state_length = 1) +
ease_aes('cubic-in-out')
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
animate(p, 200, fps = 10, duration = 47, width = 1000, height = 800, renderer=gifski_renderer("attacktype.gif"))
Наблюдения по группировкам: число раненых/убитых
GTO|>group_by(gname)|>
summarize(uni_num_kill=sum(nkill), uni_num_wound=sum(nwound),
uni_num_kill_ter=sum(nkillter), uni_num_wound_ter=sum(nwoundte))|>
arrange(desc(uni_num_kill))|>
rmarkdown::paged_table()
Среднее местоположение терактов группировок. Знание региона разбивает действия группировок
GTO|>group_by(gname, region_txt)|>
summarize(uni_long=mean(longitude),uni_lat=mean(latitude))|>
arrange(gname)|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'gname'. You can override using the
## `.groups` argument.
Самый распространённый тип атаки у группировок:
GTO|>group_by(gname, attacktype1_txt)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
group_by(gname)|>
summarize(frequent_method=attacktype1_txt[which.max(uni_num)])|>
arrange(gname)|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'gname'. You can override using the
## `.groups` argument.
Самая распространённая цель у группировок:
GTO|>group_by(gname, target1)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
group_by(gname)|>
summarize(frequent_target=target1[which.max(uni_num)])|>
arrange(gname)|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'gname'. You can override using the
## `.groups` argument.
GTO|>group_by(gname, target1)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
arrange(desc(uni_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'gname'. You can override using the
## `.groups` argument.
Самые разнообразные цели у группировок:
GTO|>group_by(gname, target1, target2, target3)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
group_by(gname)|>
summarize(target_num=n())|>
arrange(desc(target_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'gname', 'target1', 'target2'. You can
## override using the `.groups` argument.
Сколько убитых/раненых каждым типом атаки:
GTO|>group_by(gname, target1)|>
summarize(uni_num=n(),uni_per=100*n()/nrow(GTO))|>
group_by(gname)|>
summarize(frequent_target=target1[which.max(uni_num)])|>
arrange(gname)|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'gname'. You can override using the
## `.groups` argument.
GIF со странами
GTA <- GTO|>group_by(iyear, country_txt)|>
summarize(terr_num=n(),terr_per=100*n()/nrow(GTO))|>
arrange(iyear, desc(terr_num))|>
rmarkdown::paged_table()
## `summarise()` has grouped output by 'iyear'. You can override using the
## `.groups` argument.
library(ggplot2)
library(gganimate)
library(gapminder)
library(gifski)
theme_set(theme_classic())
GTA <- GTA|>
group_by(iyear)|>
mutate(rank = min_rank(-terr_num)*1)|>
filter(rank<=10)|>
ungroup()
p <- ggplot(GTA, aes(rank, group = country_txt,
fill = as.factor(country_txt), color = as.factor(country_txt))) +
geom_tile(aes(y = terr_num/2,
height = terr_num,
width = 0.9), alpha = 0.8, color = NA) +
# text in x-axis (requires clip = "off" in coord_*)
# paste(country, " ") is a hack to make pretty spacing, since hjust > 1
# leads to weird artifacts in text spacing.
geom_text(aes(y = 0, label = paste(country_txt, " ")), vjust = 0.2, hjust = 1) +
coord_flip(clip = "off", expand = FALSE) +
scale_y_continuous(labels = scales::comma) +
scale_x_reverse() +
guides(color = FALSE, fill = FALSE) +
labs(title='{closest_state}', x = "", y = "Number of Terrorist Acts") +
theme(plot.title = element_text(hjust = 0, size = 22),
axis.ticks.y = element_blank(), # These relate to the axes post-flip
axis.text.y = element_blank(), # These relate to the axes post-flip
plot.margin = margin(1,1,1,4, "cm")) +
transition_states(iyear, transition_length = 4, state_length = 1) +
ease_aes('cubic-in-out')
animate(p, 200, fps = 10, duration = 47, width = 800, height = 600, renderer=gifski_renderer("terract.gif"))
Число зависимость числа жертв от длительности теракта. Утверждение: чем дольше конфликт, тем больше жертв
GTO|>
group_by(idate)|>
mutate(resNum=as.numeric(as.Date(resolution, format="%m/%d/%Y")),
idateNum=as.numeric(idate))|>
# mutate(resolution=ifelse(is.na(resolution),0,resolution),
# idateNum=ifelse(is.na(idate),0,idateNum))|>
mutate(duration = ifelse(extended==0,0, resNum-idateNum))|>group_by(duration)|>
summarize(casualties = mean(nkill, na.rm=T)+mean(nwound, na.rm=T))|>
arrange(desc(casualties))|>
rmarkdown::paged_table()